# 12.is 跟 == 的区别

# is 跟 == 的区别

== :用于比较,比较二个值是否相同

is : 用于比较,比较二个值的内存地址是否相同,内存地址可变的

# 查看变量的内存地址 - id()

可以通过id()来查看内存地址

格式:id(变量)

s = 1
print(id(s))

执行结果:
1634800904072

# 通过is来比较内存地址

整形

so = 1
wo = 1
print(so is wo)

执行结果:
True

字符串

so = "你好"
wo = "你好"
print(so is wo)

执行结果:
True

列表

so = ["你好"]
wo = ["你好"]
print(so is wo)

执行结果:
False

元组

so = ("你好",)
wo = ("你好",)
print(so is wo)

执行结果:
False

字典

so = {"你好":"世界"}
wo = {"你好":"世界"}
print(so is wo)

执行结果:
False

# 内存地址

不知道有没有发现上面进行的 is 比较的五种数据类型中,为什么就整形跟字符串的内存地址不变,Python为了减少空间容量的消耗,内置了一个机制:小数据池

# 小数据池

小数据池也称为常量池,就是把我们使用过的值存储在小数据池中,供其他的变量使用

小数据池是专门给数字跟字符串使用的,其他数据类型不可使用

数字:

1. 能存储到小数据池的数字范围:-5~256,就是说在这个范围的数字都会被加入小数据池中,如果多个变量使用相同	的,并在小数据池范围的数字,那就会使用相同的数

字符串

1. 能存储到小数据池的字符串范围:纯文字信息和下划线组成的字符串
2. 如果字符串带有特殊字符,那不会被添加到小数据池
3. 如果是单一字符 *n 的情况下,"a" *20,在20个单位内是可以的,超过20个单位就不会添加到小数据池中
4. 在Python中,一般情况下在Python文件中,如果你只是单纯的定义一个字符串,那一般情况下都会被添加到小数据池中,也可以这样认为,在使用字符串的时候,python会帮把字符串进行缓存,在下次使用的时候直接指向这个字符串即可,这样可以节省很多内存空间,不过这个问题官方还没有出一个完美的结论和定论

注意:

数字

在PyCharm,小数据池中的数字范围:-5~未知,因为PyCharm中更改Python中的内置小数据池,PyCharm认为,这样的修改会有助程序人员开发代码,不过这样的行为,违反了python中的规则

so = 1111111111111
so1 = 1111111111111
print(so is so1)

执行结果:
True

字符串

在PyCharm,小数据池中的字符串范围:未知,因为PyCharm中更改Python中的内置小数据池,PyCharm认为,这样的修改会有助程序人员开发代码,不过这样的行为,违反了python中的规则

在PyCharm中的特殊字符也可以添加到小数据池

so = "你好¥#"
so1 = "你好¥#"
print(so is so1)

执行结果:
True